package com.samuel.blog.service;

import com.github.pagehelper.PageInfo;
import com.samuel.blog.bean.PageBean;

import java.io.Serializable;
import java.util.List;
import java.util.Map;


/**
 * 基础服务中间件
 *
 * @author kaiji
 *
 * @since 2019-11-17
 */
public interface BaseService<T, E extends Serializable> {

	/**
	 * 分页查询
	 * @param pageBean
	 * 		分页实体类
	 * @param map
	 * 		分页条件
	 * @return	分页实体类列表
	 */
	PageInfo<T> selectPage(PageBean pageBean, Map<String, Object> map);
	
	/**
	 * 根据主键查询
	 *
	 * @param id
	 * 		T 类型的主键
	 * @return	T 实体类
	 */
	T selectById(E id);
	
	/**
	 * 根据不为空修改
	 *
	 * @param entity
	 * 		修改的实体类
	 * @return	0 or 1
	 */
	int updateById(T entity);
	
	/**
	 * 根据条件查询对象集合
	 *
	 * @param map
	 * 		条件map
	 * @return T 类型的列表
	 */
	List<T> selectByMap(Map<String, Object> map);
	
	/**
	 * 全部插入
	 *
	 * @param entity
	 * 		插入的数据实体类
	 * @return	0 or 1
	 */
	int insert(T entity);
	
	/**
	 * 查询全部
	 *
	 * @return	T 类型的列表
	 */
	List<T> selectAll();
}
